package tv.acgn.advertisement.publish.action;

import java.util.List;

import tv.acgn.advertisement.publish.exception.AbstractAdPubException;

/**
 * @author : junG
 * @program : advertisement-ad-pub-action
 * @description : 基础分发器 各分发器参考基础分发器类 根据需要重写路由方法
 * @date : 2019-06-02 13:45
 **/

public class BaseAction<T, P> {

    /**
     * <h2>获取单一对象方法</h2>
     *
     * @param id [1] 对象识别码
     *
     * @return {@link T} 返回目标对象
     *
     * @throws 异常
     * @author junG
     * @description 获取单一对象方法
     * @date 13:59 2019/6/2
     */
    public T get(String id) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>获取批量对象方法</h2>
     *
     * @param ids [1] 对象识别码集合
     *
     * @return {@link T} 返回目标对象集合
     *
     * @throws 异常
     * @author junG
     * @description 获取批量对象方法
     * @date 13:59 2019/6/2
     */
    public List<T> getBatch(List<String> ids) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>查找对象方法</h2>
     *
     * @param findParam [1] 查找参数
     *
     * @return {@link List<T>} 返回所有符合条件的查找结果
     *
     * @throws 异常
     * @author junG
     * @description 查找对象方法
     * @date 13:59 2019/6/2
     */
    public List<T> find(P findParam) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>新增对象方法</h2>
     *
     * @param addParam [1]  新增对象属性
     *
     * @return {@link T}
     *
     * @throws 异常
     * @author junG
     * @description 新增对象方法
     * @date 14:00 2019/6/2
     */
    public T add(P addParam) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>批量新增对象方法</h2>
     *
     * @param addBatchParam [1]
     *
     * @return {@link T}
     *
     * @throws 异常
     * @author junG
     * @description 批量新增对象方法
     * <p>此方法不同实现可能变化较大 故不对入参 出参做限制</p>
     * @date 14:04 2019/6/2
     */
    public T addBatch(P addBatchParam) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>变更对象方法</h2>
     *
     * @param updateParam [1] 变更对象参数
     *
     * @return {@link T}
     *
     * @throws 异常
     * @author junG
     * @description 变更对象方法
     * @date 14:00 2019/6/2
     */
    public T update(P updateParam) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>批量变更对象方法</h2>
     *
     * @param updateParam [1] 变更对象参数
     *
     * @return {@link T}
     *
     * @throws 异常
     * @author junG
     * @description 批量变更对象方法
     * <p>此方法不同实现可能变化较大 故不对入参 出参做限制</p>
     * @date 14:00 2019/6/2
     */
    public T updateBatch(P updateBatchParam) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>删除单一对象方法</h2>
     *
     * @param id [1] 对象识别码
     *
     * @return {@link T}
     *
     * @throws 异常
     * @author junG
     * @description 删除单一对象方法
     * @date 14:01 2019/6/2
     */
    public T delete(String id) throws AbstractAdPubException {
        return null;
    }

    /**
     * <h2>批量删除对象</h2>
     *
     * @param ids [1] 待删除的对象识别码集合
     *
     * @return {@link List<T>}
     *
     * @throws 异常
     * @author junG
     * @description 批量删除对象
     * @date 14:07 2019/6/2
     */
    public List<T> deleteBatch(List<String> ids) throws AbstractAdPubException {
        return null;
    }
}
